package kotan.model;

import java.io.Serializable;
import java.util.Date;

import org.slim3.datastore.Attribute;
import org.slim3.datastore.Model;

import com.google.appengine.api.datastore.Blob;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Text;

@Model(schemaVersion = 1)
public class _KotanEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Attribute(primaryKey = true)
    private Key key;

    @Attribute(version = true)
    private Long version;

    private String strValue;

    private Boolean boolValue;

    private Long longValue;

    private Double doubleValue;

    private Date dateValue;

    private Text textValue;

    private Blob blobValue;

    /**
     * Returns the key.
     *
     * @return the key
     */
    public Key getKey() {
        return key;
    }

    /**
     * Sets the key.
     *
     * @param key
     *            the key
     */
    public void setKey(Key key) {
        this.key = key;
    }

    /**
     * Returns the version.
     *
     * @return the version
     */
    public Long getVersion() {
        return version;
    }

    /**
     * Sets the version.
     *
     * @param version
     *            the version
     */
    public void setVersion(Long version) {
        this.version = version;
    }

    /**
     * strValueを取得する.
     * @return strValue
     */
    public String getStrValue() {
        return strValue;
    }

    /**
     * strValueを指定して設定する.
     * @param strValue 設定するstrValue
     */
    public void setStrValue(String strValue) {
        this.strValue = strValue;
    }

    /**
     * boolValueを取得する.
     * @return boolValue
     */
    public Boolean getBoolValue() {
        return boolValue;
    }

    /**
     * boolValueを指定して設定する.
     * @param boolValue 設定するboolValue
     */
    public void setBoolValue(Boolean boolValue) {
        this.boolValue = boolValue;
    }

    /**
     * intValueを取得する.
     * @return doubleValue
     */
    public Double getDoubleValue() {
        return doubleValue;
    }

    /**
     * intValueを指定して設定する.
     * @param doubleValue 設定するintValue
     */
    public void setDoubleValue(Double intValue) {
        this.doubleValue = intValue;
    }

    /**
     * longValueを取得する.
     * @return longValue
     */
    public Long getLongValue() {
        return longValue;
    }

    /**
     * longValueを指定して設定する.
     * @param longValue 設定するlongValue
     */
    public void setLongValue(Long longValue) {
        this.longValue = longValue;
    }

    /**
     * dateValueを取得する.
     * @return dateValue
     */
    public Date getDateValue() {
        return dateValue;
    }

    /**
     * dateValueを指定して設定する.
     * @param dateValue 設定するdateValue
     */
    public void setDateValue(Date dateValue) {
        this.dateValue = dateValue;
    }

    /**
     * textValueを取得する.
     * @return textValue
     */
    public Text getTextValue() {
        return textValue;
    }

    /**
     * textValueを指定して設定する.
     * @param textValue 設定するtextValue
     */
    public void setTextValue(Text textValue) {
        this.textValue = textValue;
    }

    /**
     * blobValueを取得する.
     * @return blobValue
     */
    public Blob getBlobValue() {
        return blobValue;
    }

    /**
     * blobValueを指定して設定する.
     * @param blobValue 設定するblobValue
     */
    public void setBlobValue(Blob blobValue) {
        this.blobValue = blobValue;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((blobValue == null) ? 0 : blobValue.hashCode());
        result = prime * result + ((boolValue == null) ? 0 : boolValue.hashCode());
        result = prime * result + ((dateValue == null) ? 0 : dateValue.hashCode());
        result = prime * result + ((doubleValue == null) ? 0 : doubleValue.hashCode());
        result = prime * result + ((key == null) ? 0 : key.hashCode());
        result = prime * result + ((longValue == null) ? 0 : longValue.hashCode());
        result = prime * result + ((strValue == null) ? 0 : strValue.hashCode());
        result = prime * result + ((textValue == null) ? 0 : textValue.hashCode());
        result = prime * result + ((version == null) ? 0 : version.hashCode());
        return result;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null) return false;
        if (getClass() != obj.getClass()) return false;
        _KotanEntity other = (_KotanEntity) obj;
        if (blobValue == null) {
            if (other.blobValue != null) return false;
        } else if (!blobValue.equals(other.blobValue)) return false;
        if (boolValue == null) {
            if (other.boolValue != null) return false;
        } else if (!boolValue.equals(other.boolValue)) return false;
        if (dateValue == null) {
            if (other.dateValue != null) return false;
        } else if (!dateValue.equals(other.dateValue)) return false;
        if (doubleValue == null) {
            if (other.doubleValue != null) return false;
        } else if (!doubleValue.equals(other.doubleValue)) return false;
        if (key == null) {
            if (other.key != null) return false;
        } else if (!key.equals(other.key)) return false;
        if (longValue == null) {
            if (other.longValue != null) return false;
        } else if (!longValue.equals(other.longValue)) return false;
        if (strValue == null) {
            if (other.strValue != null) return false;
        } else if (!strValue.equals(other.strValue)) return false;
        if (textValue == null) {
            if (other.textValue != null) return false;
        } else if (!textValue.equals(other.textValue)) return false;
        if (version == null) {
            if (other.version != null) return false;
        } else if (!version.equals(other.version)) return false;
        return true;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "_KotanEntity [blobValue="
            + blobValue
            + ", boolValue="
            + boolValue
            + ", dateValue="
            + dateValue
            + ", doubleValue="
            + doubleValue
            + ", key="
            + key
            + ", longValue="
            + longValue
            + ", strValue="
            + strValue
            + ", textValue="
            + textValue
            + ", version="
            + version
            + "]";
    }

}
